1. 토큰화 (Tokenization)
텍스트를 의미 있는 최소 단위 '토큰'으로 분절하는 첫 단계입니다.
| 대분류 | 소분류 | 주요 기법 | 설명 | 대표 라이브러리 |
|---|---|---|---|---|
| 단어 내부 분절 | 서브워드(Subword) | WordPiece, BPE | 자주 등장하는 글자 묶음으로 단어를 분해해 OOV 문제를 해결. | HF Transformers |
| Byte-level BPE | 바이트 단위로 처리해 모든 문자(이모지 등)에 강건. | tiktoken (GPT) | ||
| SentencePiece | 특정 도메인 데이터로 토크나이저를 쉽게 재학습 가능. | sentencepiece | ||
| 의미 단위 분절 | 형태소(Semantic Unit) | MeCab, Okt | 한국어의 조사/어미를 분해해 의미 단위를 보존. | KoNLPy, khaiii |
| 단어/공백 | 단어 분절 | 공백/구두점 기준으로 간단히 토큰화, 빠르고 직관적. | NLTK, spaCy | |
| 문자/음절 | char n-gram | 한 글자 단위로 토큰화해 오탈자/신조어에 강함. | scikit-learn | |
| 문장/문단 | Sentence Split | RAG/검색을 위해 문장 → 문단 단위로 잘라 인덱싱. | pysbd, langchain |
2. 벡터화 (Vectorization)
토큰을 단어의 의미를 고려하지 않고, 통계 정보(빈도, 유무 등)만을 이용해 벡터로 표현하는 방식입니다.
| 대분류 | 소분류 | 주요 기법 | 설명 | 대표 라이브러리 |
|---|---|---|---|---|
| 단순 카운팅 (Counting) | 존재 유무 | One-hot Encoding | 단어의 존재 여부를 0과 1로만 표기. 개념 학습에 좋음. | scikit-learn |
| 등장 빈도 | BoW | 단어 순서를 무시하고 단어 출현 빈도로 문서를 표현. | scikit-learn | |
| 가중치 부여 (Weighting) | 중요도 | TF-IDF | 흔한 단어 가중치는 낮추고, 중요한 단어는 부각. 강력한 베이스라인. | scikit-learn |
| 검색 최적화 | BM25 | TF-IDF 확장형. 키워드 검색/RAG 리트리벌의 사실상 표준. | rank-bm25 | |
| 효율성 중심 | 해싱 | HashingVectorizer | 해시 함수로 고정 차원에 매핑. 메모리/속도 효율적. | scikit-learn |
3. 임베딩 (Embedding)
토큰을 단어의 의미와 문맥 정보를 압축한 밀집 벡터(Dense Vector)로 표현하는 방식입니다.
| 대분류 | 소분류 | 주요 기법 | 설명 | 대표 라이브러리 |
|---|---|---|---|---|
| 고정 임베딩 (Static) | 단어 단위 | Word2Vec, GloVe | 단어의 의미를 고정된 벡터로 표현. 문맥 변화는 반영 불가. | Gensim |
| 서브워드 | fastText | 단어 내부(subword)를 학습해 OOV(신조어 등)에 강함. | fastText, Gensim | |
| 문서 단위 | Doc2Vec | 문서 ID를 함께 학습하여 문서 전체 벡터를 획득. | Gensim | |
| 문맥 임베딩 (Contextual) | 단어 단위 | BERT, RoBERTa | 문맥에 따라 단어의 벡터가 동적으로 변함 (분류, QA, NER). | HF Transformers |
| (Bi-directional) | ELMo | 양방향 LSTM 기반의 초기 문맥 임베딩 모델 (역사적 의미). | AllenNLP | |
| 문장/문서 | Sentence-BERT, e5 | 문장 전체의 의미를 하나의 벡터로 직접 임베딩 (RAG 검색). | sentence-transformers | |
| 다국어 | LaBSE, mSBERT | 언어가 달라도 같은 의미라면 가까운 벡터로 매핑. | TFHub, HF |